﻿Public Class XuLyChuoi
    Shared hs As New Hashtable()
    Shared h As New Hashtable()
    Public Shared Function Doisosangchu(ByVal chuoi As String) As String

        h("0") = " nghìn "
        h("1") = " triệu "
        h("2") = " tỉ "
        h("3") = " nghìn tỉ "
        h("4") = " triệu tỉ "
        h("5") = " tỉ tỉ "

        hs("0") = "Lẻ"
        hs("1") = "Một"
        hs("2") = "Hai"
        hs("3") = "Ba"
        hs("4") = "Bốn"
        hs("5") = "Năm"
        hs("6") = "Sáu"
        hs("7") = "Bảy"
        hs("8") = "Tám"
        hs("9") = "Chín"
        hs("10") = "Mười"
        hs("11") = "Mười một"
        hs("12") = "Mười hai"
        hs("13") = "Mười ba"
        hs("14") = "Mười bốn"
        hs("15") = "Mười lăm"
        hs("16") = "Mười sáu"
        hs("17") = "Mười bảy"
        hs("18") = "Mười tám"
        hs("19") = "Mười chín"
        hs("20") = "Hai mươi"
        hs("30") = "Ba mươi"
        hs("40") = "Bốn mươi"
        hs("50") = "Năm mươi"
        hs("60") = "Sáu mươi"
        hs("70") = "Bảy mươi"
        hs("80") = "Tám mươi"
        hs("90") = "Chín mươi"
        Dim returnkqua As String = ""

        Dim chuoicd As String

        chuoicd = ThemDauPhayVaoChuoi(chuoi)

        Dim countdauphay As Integer = 0
        For Each item As Char In chuoicd
            If item = ","c Then
                countdauphay += 1
            End If
        Next

        Dim chuoiktra As String() = chuoicd.Split(","c)

        For i As Integer = 0 To chuoiktra.Length - 1
            countdauphay = countdauphay - 1
            returnkqua += KTText(chuoiktra(i))
            If chuoiktra(i) <> "000" Then
                returnkqua += h(countdauphay.ToString())

            End If
        Next
        Return returnkqua

    End Function

    Public Shared Function ThemDauPhayVaoChuoi(ByVal chuoi As String) As String
        Dim chuoicd As String
        Dim sodu As Integer = chuoi.Length Mod 3

        If sodu <> 0 Then
            chuoicd = chuoi.Insert(sodu, ",")
            For i As Integer = 1 To chuoi.Length \ 3 - 1
                sodu += 4
                chuoicd = chuoicd.Insert(sodu, ",")
            Next
        Else
            sodu += 3
            chuoicd = chuoi
            For i As Integer = 1 To chuoi.Length \ 3 - 1
                chuoicd = chuoicd.Insert(sodu, ",")

                sodu += 4
            Next
        End If
        Return chuoicd
    End Function
    Private Shared Function KTText(ByVal text As String) As String

        Dim kqua As String = ""
        Try
            If text = "000" OrElse text = "00" OrElse text = "0" Then
                kqua = ""
            ElseIf text.Length = 3 Then
                Dim dv As Integer, c As Integer, tram As Integer
                dv = Integer.Parse(text.Substring(text.Length - 1))

                c = Integer.Parse(text.Substring(1))
                Dim chuc As Integer = c - dv
                tram = Integer.Parse(text.Substring(0, 1))

                If dv = 0 AndAlso chuc <> 0 Then
                    kqua = hs(tram.ToString()) + " trăm " & hs(chuc.ToString()).ToString().ToLower() & " "
                ElseIf chuc = 0 AndAlso dv = 0 Then
                    kqua = hs(tram.ToString()) + " trăm "
                ElseIf tram = 0 AndAlso chuc = 0 Then
                    If dv <> 1 Then
                        kqua = "không trăm " & hs(chuc.ToString()).ToString().ToLower() & " " & hs(dv.ToString()).ToString().ToLower() & " "
                    Else
                        kqua = "không trăm " & hs(chuc.ToString()).ToString().ToLower() & " một "
                    End If
                ElseIf tram = 0 Then
                    If dv <> 1 Then
                        kqua = "không trăm " & hs(chuc.ToString()).ToString().ToLower() & " " & hs(dv.ToString()).ToString().ToLower() & " "
                    Else
                        kqua = "không trăm " & hs(chuc.ToString()).ToString().ToLower() & " mốt "
                    End If
                Else
                    If dv <> 1 Then
                        kqua = hs(tram.ToString()) + " trăm " & hs(chuc.ToString()).ToString().ToLower() & " " & hs(dv.ToString()).ToString().ToLower() & " "
                    Else
                        kqua = hs(tram.ToString()) + " trăm " & hs(chuc.ToString()).ToString().ToLower() & " mốt "
                    End If
                End If
            ElseIf text.Length = 2 Then
                Dim dv As Integer
                dv = Integer.Parse(text.Substring(1))
                Dim chuc As Integer = Integer.Parse(text) - dv
                If dv = 0 Then
                    kqua = hs(chuc.ToString()).ToString() & " "
                Else
                    If dv <> 1 OrElse dv <> 5 Then
                        kqua = hs(chuc.ToString()).ToString() & " " & hs(dv.ToString()).ToString().ToLower() & " "
                    ElseIf dv = 1 Then
                        kqua = hs(chuc.ToString()).ToString() & " mốt "
                    ElseIf dv = 5 AndAlso chuc = 0 Then
                        kqua = hs(chuc.ToString()).ToString() & " năm "
                    End If
                End If
            ElseIf text.Length = 1 Then
                Dim dv As Integer
                dv = Integer.Parse(text)
                If dv <> 5 Then
                    kqua = hs(dv.ToString()).ToString() & " "
                Else
                    kqua = "năm "

                End If
            End If
        Catch

        End Try
        Return kqua
    End Function
End Class
